今天會使用dotnet core CML 製作 dotnet coe mvc 專案, 並且將它包成docker container,並跑在 Minikubes 上。教學大綱如下:
我們可以在本機端新增一個資料夾,並且新增一個webapi專案
mkdir mywebmvc
dotnet new mvc
會在該目錄底下建立一個dotnet core mvc 的Project
這時將該專案執行起來,他會執行完restore後將該專案run起來
dotnet run
會在localhost:5000 起一個 dotnet core mvc的Application,
我們將上述建立起來的Webapi Application包成 Docker Image。 首先要該專案底下加入Dockerfile.
將程式包成Image時,都需要有一個 Dockerfile 來描述包裝過程,新增一個DOCKERFILE
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "mywebmvc.dll"]
FROM microsoft/dotnet:sdk AS build-env
這行會載入程式需要的執行環境,會根據不同的需求下載不同的映像檔,這裡是指 microsoft/dotnet:2.0
WORKDIR /app
在這個 Docker 中的 Linux 即將會建立一個目錄 /app
COPY *.csproj ./
代表會將本機端與 *.csproj 同一層的所有檔案加到 Linux 的 /app 目錄底下
RUN dotnet restore
執行dotnet restore,將相依的檔案下載下來
COPY . ./
將所有檔案加到 Linux 的 /app 目錄底下
RUN dotnet publish -c Release -o out
Publish目前的專案
FROM microsoft/dotnet:2.0-aspnetcore-runtime
建立run time的 Image
WORKDIR /app
在這個 Docker 中的 Linux 即將會建立一個目錄 /app
COPY --from=build-env /app/out .
將build好的專案複製到/app/out目錄底下
ENTRYPOINT ["dotnet", "mywebmvc.dll"]
設定進入點為 mywebmvc.dll
在該專案底下建好Dockerfile後執行以下指令
$ docker build .
建立好後,可以查詢製作好的Image
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> ca5ea1b4ba20 About a minute ago 1.96GB
在包好 Docker Image 之後,我們可以先在本機上透過 docker指令 跑起我們的 Docker Container。記住你剛剛的 Docker Image ID,並輸入指令 docker run
在這之前要輸入以下指令,以免發生錯誤
docker container stop stoic_goldstine
docker container rm stoic_goldstine
現在我們可以執行以下的指令,將包好的Application 執行起來
docker run --name mywebmvc --env ASPNETCORE_ENVIRONMENT=Development -p 80:80 mywebmvc:latest
現在你可以在
http://localhost
看到你製作好的Docker Container